Data processing systems, such as smartphones, tablet computers, laptop computers, desktop computers, entertainment devices and other consumer electronic systems, are often subject to attacks from malware that can cause malicious attacks on the systems. These attacks can be designed to steal personal information (e.g. the user's credit card information) from the systems or to hijack the systems to perform a task desired by a designer of the malware. As a result, computer security technology has developed many different ways to protect data processing systems from such attacks. For example, a data processing system can be designed to use software that has been signed with a digital signature by a trusted authority (e.g. the vendor of the system), and the system can at run time of the software check the software's signature before beginning to execute the software. The digital signature is included with the software to show that the software can be trusted (and therefore is not malware) and can be executed without causing harm to the system. If each of all of the software components on the system includes a digital signature, then the system may be considered secure from most malicious attacks.
Unfortunately, there is often a need to execute unsigned software (also referred to as unsigned code), and this need often arises in the context of web pages that contain unsigned software such as Javascript, for example. A huge number of web pages include such unsigned software, and this software is often executed by using a Just-In-Time (JIT) compiler that is often included with a web browser. A JIT compiler includes a program that turns bytecode (e.g. a platform independent program that contains instructions) into platform specific executable code that can be immediately executed by a processor on the specific data processing system. For example, source code language statements are compiled by a compiler into bytecode (which is platform independent code that can be sent to any platform for execution), and the JIT compiler converts the bytecode into platform specific code that can be executed by the platform's processor(s). Malware has developed which exploits the use of unsigned code with JIT compilers. An example of such malware uses what is referred to as JIT spraying attack which is further described in U.S. Pat. No. 9,015,834. The use of JIT compilers has exposed vulnerabilities in the security of data processing systems, and numerous attempts to cure these and other vulnerabilities are known in the art including: U.S. Pat. No. 9,015,834; 8,646,050; and U.S. Patent Application Publication Nos.: 201510095661; 201310132690; 2011/0191848; 2008/0127142; 2014/0115292; 2012/0260106; 2014/0095812; and U.S. patent application Ser. No. 14/503,195, filed Sep. 30, 2014.